import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm  # 新增：用于字体管理
import sqlite3

# 关键新增：配置中文字体（解决中文乱码和警告）
# 查找系统中的中文字体（以微软雅黑为例，若不存在可替换为 'SimHei' 等）
font_path = fm.findfont(fm.FontProperties(family='simhei'))
plt.rcParams['font.family'] = fm.FontProperties(fname=font_path).get_name()  # 设置全局字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示异常（可选）

# 步骤1：读取技能统计数据
df_skills = pd.read_csv('python相关职位技能出现次数统计.csv')

# 步骤2：从数据库查询符合条件的总职位数（jobName包含"python"的记录数）
conn = sqlite3.connect('../index/boss_job_data.db')
cursor = conn.cursor()
# 统计 jobName 包含 "python"（不区分大小写）的职位总数
cursor.execute('SELECT COUNT(*) FROM t_job_info WHERE LOWER(jobName) LIKE "%python%"')
total_jobs = cursor.fetchone()[0]
conn.close()


# 步骤3：绘制水平条形图（关键修改：优化布局）
plt.figure(figsize=(12, 12))  # 增大图表高度（原8→12），为Y轴标签留出更多空间
plt.barh(
    df_skills['技能'],
    df_skills['出现次数'],
    color='skyblue',
    edgecolor='black'
)

# 设置图表标题和标签
plt.title(f'Python相关职位技能出现次数统计（总职位数：{total_jobs}）', fontsize=14)
plt.xlabel('出现次数', fontsize=12)
plt.ylabel('技能', fontsize=12)

# 关键修改：调整Y轴标签字体大小和边距
plt.yticks(fontsize=10)  # 减小Y轴标签字体（原默认12→10）
plt.subplots_adjust(left=0.25)  # 增加左侧边距（原默认0.125→0.25），避免长技能名称被截断

# 反转Y轴，使出现次数高的技能在上部
plt.gca().invert_yaxis()

plt.tight_layout()  # 自动优化布局（确保调整后生效）
plt.savefig('python技能统计图表.png', dpi=300, bbox_inches='tight')
plt.show()